package com.it.tencent.usercenter.main;

import java.util.*;

/**
 * 思路从输入文件开始
 * 我们需要设计一个二重数组数据类型
 * 这个数据类型第一个数组 - s
 * 数组中记录的是 依赖它 的文件们 t
 * 其中我们每次还需要记录一个入度 inDegree
 * 之后我们定义一个que  的 Que->这个用来 记录入度为0 的
 * 我们遍历入度数组
 * 将入度为0的点加入进去
 * 之后我们循环遍历这个que
 * while(!que.isEmpty())
 * 我们弹出第一个元素，这个时候我们需要使用一个res数组来记录我们最终的结果
 * 每弹出一个元素，记录一个元素
 *弹出了这个元素之后，我们要删除二维数组中有这个元素的（这里一时想不起来的了），之后再次遍历有没有入度为0的
 这个时候我们需要使用一个ArrayList 来接住这个元素之后的所有元素
 然后遍历这个数组file，使用inDegree数组，对所有元素进行-1
 之后file数组中这个元素如果为0，直接加入就行了
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        List<List<Integer>> graph = new ArrayList<List<Integer>>();
        for (int i = 0; i < n; i++) {
            graph.add(new ArrayList<>());
        }
        int[] inDegree = new int[n];
        for (int i = 0; i < m; i++) {
            int s = sc.nextInt();
            int t = sc.nextInt();
            graph.get(s).add(t);
            inDegree[t]++;
        }
        Queue<Integer> queue = new LinkedList<>();
        for (int i = 0; i < m; i++) {
            if (inDegree[i] == 0) {
                queue.add(i);
            }
        }
        List<Integer> res = new ArrayList<>();
        while (!queue.isEmpty()) {
            int u = queue.poll();
            res.add(u);
            for (int file : graph.get(u)) {
                inDegree[file]--;
                if (inDegree[file] == 0) {
                    queue.add(file);
                }
            }
        }
        if (res.size() == n) {
           for(int i = 0;i<n;i++){
               System.out.print(res.get(i));
               if(i<res.size()-1){
                   System.out.print(" ");
               }
           }
        }else{
            System.out.println(-1);
        }
    }
}
